package com.roy.wakeupes.utils;

import java.util.ArrayList;
import java.util.List;

public class ForwardMaximumMatching {

    public static void main(String[] args) {
        String text = "自然语言处理是人工智能和语言学领域的分支学科";
        List<String> dictionary = new ArrayList<>();
        // 假设词典已经加载
        dictionary.add("自然");
        dictionary.add("语言");
        dictionary.add("处理");
        dictionary.add("是");
        dictionary.add("人工智能");
        dictionary.add("和");
        dictionary.add("语言学");
        dictionary.add("领域");
        dictionary.add("分支");
        dictionary.add("学科");
        dictionary.add("支学科");


        List<String> tokens = forwardMaximumMatching(text, dictionary);

        // 打印分词结果
        for (String token : tokens) {
            System.out.println(token);
        }
    }

    public static List<String> forwardMaximumMatching(String text, List<String> dictionary) {
        List<String> tokens = new ArrayList<>();
        int start = 0;

        while (start < text.length()) {
            int maxLen = 0;
            int maxEnd = start;
            // 寻找最长匹配的词
            for (int end = start; end <= text.length(); end++) {
                String word = text.substring(start, end);
                if (dictionary.contains(word) && end - start > maxLen) {
                    maxLen = end - start;
                    maxEnd = end;
                }
            }
            // 如果找到了匹配的词，则添加到结果中
            if (maxLen > 0) {
                tokens.add(text.substring(start, maxEnd));
                start = maxEnd;
            } else {
                // 如果没有找到匹配的词，按单个字符切分
                tokens.add(text.substring(start, start + 1));
                start++;
            }
        }

        return tokens;
    }
}